// #include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/mm.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Wheelz");
MODULE_DESCRIPTION("mmap demo");

static unsigned long p = 0;

static int __init init(void)
{
    //分配共享内存（一个页面）
    p = __get_free_pages(GFP_KERNEL, 0); //得到的当然是一个虚拟地址了
    SetPageReserved(virt_to_page(p)); //#define virt_to_page(kaddr)    (mem_map + (__pa(kaddr) >> PAGE_SHIFT)) //12
    printk("<1> p = 0x%08x\n", p);
    printk("<1> __pa(p) = 0x%08x\n", __pa(p));
    //在共享内存中写上一个字符串
    strcpy(p, "Hello world!\n");
    return 0;
}

static void __exit exit(void)
{
    ClearPageReserved(virt_to_page(p));
    free_pages(p, 0);
}

module_init(init);
module_exit(exit);
